// #include <stdio.h>
// #include <stdlib.h>
// #include <unistd.h>
// #include <string.h>

// int main()
// {
//     int pipefd[2];
//     pid_t pid;
//     char buffer[128];

//     if(pipe(pipefd) == -1)//创建管道
//     {
//         perror("pipe");
//         exit(EXIT_FAILURE);
//     }
//     if ((pid = fork()) == -1)//for创建进程
//     {
//         perror("fork");
//         exit(EXIT_FAILURE);
//     }
//     if (pid == 0)//子进程
//     {
//         close(pipefd[0]);//关闭读
//         const char* message = "hello world";
//         write(pipefd[1],message,strlen(message) + 1);
//         close(pipefd[1]);
//         exit(EXIT_SUCCESS);
//     }else
//     {
//         close(pipefd[1]);//关闭写
//         read(pipefd[0],buffer,sizeof(buffer));
//         printf("Receive message:%s\n",buffer);
//         close(pipefd[0]);
//     }
//     return 0;
// }
////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main()
{
    const char* fifo = "/tmp/myfifo";
    char buffer[128];

    if (mkfifo(fifo,0666) == -1)//创建通道
    {
        perror("mkfifo");
        exit(EXIT_FAILURE);
    }

    pid_t pid;
    if((pid = fork()) == -1){//创建子进程
        perror("fork");
        exit(EXIT_FAILURE);
    }
    if (pid == 0){
        int fd = open(fifo,O_WRONLY);
        const char* message = "hello world";
        write(fd,message,strlen(message) + 1);//将数据 message 写入 fd
        close(fd);
        exit(EXIT_SUCCESS);
    }else{
        int fd = open(fifo,O_RDONLY);//
        read(fd,buffer,sizeof(buffer));
        printf("Rerceive message:%s\n",buffer);
        close(fd);
    }
    unlink(fifo);
    return 0;
}


